home *** CD-ROM | disk | FTP | other *** search
/ START Magazine / START VOL 3 NO 7.st / DAHDIT.ARC / DAHDIT.LST next >
Encoding:
File List  |  1988-11-10  |  41.7 KB  |  1,534 lines

  1. Rem ***********************************************************************
  2. Rem *                                                                     *
  3. Rem *                           DAH - DITTER                              *
  4. Rem *                     Morse Code Trainer Program                      *
  5. Rem *                                by                                   *
  6. Rem *                          Sal Gutierrez                              *
  7. Rem *                                                                     *
  8. Rem *                 Copyright 1988 Antic Publishing Inc.                *
  9. Rem *                                                                     *
  10. Rem ***********************************************************************
  11. Rem
  12. Orig_color0%=Xbios(7,0,-1)
  13. Orig_color1%=Xbios(7,1,-1)
  14. Orig_color2%=Xbios(7,2,-1)
  15. Orig_color3%=Xbios(7,3,-1)
  16. Deftext 1,0,0,4
  17. Selected%=1
  18. Msg_num%=0
  19. Deffn Status(Object%)=Dpeek(Config_adr+Object%*24+10)
  20. Dim Message$(6)
  21. Dim A$(40)
  22. Dim A%(64,6),Rate_table(4),Delay_table(4,4),Custom_flag(4,4)
  23. Dim Buffer%(60)
  24. Res%=Xbios(4)
  25. If Res%=0
  26.   Alert 1,"You must be in medium|or high res to run|Dah-ditter.",1,"Ok",D
  27. Endif
  28. '
  29. Title_screen$="DAHDIT.PI"+Str$(Res%+1)
  30. Rsrc$="DAHDIT"+Str$(Res%+1)+".RSC"
  31. If (Not Exist(Title_screen$)) Or (Not Exist(Rsrc$))
  32.   A$=Title_screen$+" and "+Rsrc$
  33.   Alert 1,A$+"|must be in the same directory as DAHDIT.PRG.",1,"Abort",D
  34.   End
  35. Endif
  36. For I%=0 To 4
  37.   Read Rate
  38.   Rate_table(I%)=Rate
  39. Next I%
  40. For I%=0 To 4
  41.   For J%=0 To 4
  42.     Read Delay,Flag
  43.     Delay_table(I%,J%)=Delay
  44.     Custom_flag(I%,J%)=Flag
  45.   Next J%
  46. Next I%
  47. For Char%=0 To 64
  48.   Element%=0
  49.   Repeat
  50.     Read Info%
  51.     A%(Char%,Element%)=Info%
  52.     Inc Element%
  53.   Until Info%=0
  54. Next Char%
  55. About%=0
  56. Config%=1
  57. Morse_table%=2
  58. Help%=3
  59. Word5%=3
  60. Word10%=4
  61. Word15%=5
  62. Word20%=6
  63. Word25%=7
  64. Char5%=10
  65. Char10%=11
  66. Char15%=12
  67. Char20%=13
  68. Char25%=14
  69. Lttrs%=17
  70. Symbols%=18
  71. Numbers%=19
  72. Mixed%=20
  73. Pure%=23
  74. Custom%=24
  75. From_a%=27
  76. From_z%=52
  77. From_0%=54
  78. From_9%=63
  79. From_ques%=65
  80. From_slash%=71
  81. To_a%=74
  82. To_z%=99
  83. To_0%=101
  84. To_9%=110
  85. To_ques%=112
  86. To_slash%=118
  87. Abort%=119
  88. Proceed%=120
  89. Help_abort%=2
  90. Help_prev%=3
  91. Help_next%=4
  92. Wordspeed%=Word5%
  93. Charspeed%=Char5%
  94. Prac_input%=Lttrs%
  95. Code_output%=Pure%
  96. From_lttr%=From_a%
  97. From_number%=From_0%
  98. From_symbol%=From_ques%
  99. To_lttr%=To_z%
  100. To_number%=To_9%
  101. To_symbol%=To_slash%
  102. Lttr_seed%=33
  103. Lttr_rng%=26
  104. Rate=11
  105. Delay=Rate
  106. Cust_flag%=0
  107. Mess_new%=1
  108. Mess_edit%=0
  109. Data 11,5.7,3.9,2.9,2
  110. Data 11,0,0,0,0,0,0,0,0,0,26.5,1,5.7,0,0,0,0,0,0,0,32.6,1,11.8,0,3.9,0,0,0,0,0
  111. Data 35.5,1,14,1,7,0,2.9,0,0,0,36,1,14.8,1,7.6,1,4,0,2,0
  112. Rem
  113. Rem **********************************************************************
  114. Rem *                           MAIN PROGRAM                             *
  115. Rem **********************************************************************
  116. Rem
  117. Gosub Rsrc_init
  118. Gosub Help_init
  119. Gosub Screen
  120. Gosub Menu_init
  121. On Menu  Gosub Selection
  122. Do
  123.   On Menu
  124. Loop
  125. Rem
  126. Rem **********************************************************************
  127. Rem *                            SCREEN DRAW                             *
  128. Rem **********************************************************************
  129. Rem
  130. Procedure Screen
  131.   Hidem
  132.   Open "I",#1,Title_screen$
  133.   Y=Inp(#1)
  134.   X=Inp(#1)
  135.   For I=0 To 15
  136.     X=Inp(#1)
  137.     Y=Inp(#1)
  138.     Z=X*256+Y
  139.     C=Xbios(7,I,Z)
  140.   Next I
  141.   Seek #1,34
  142.   Bget #1,Xbios(2),32000
  143.   Close #1
  144.   Showm
  145. Return
  146. Rem
  147. Rem **********************************************************************
  148. Rem *                         CHARACTER DATA                             *
  149. Rem **********************************************************************
  150. Rem
  151. Data 0,0,0,0,0,0,0,0,1,1,3,3,1,3,0,3,1,3,3,1,3,0,0,0,3,3,1,1,3,3,0
  152. Data 3,1,1,1,1,3,0,1,3,1,3,1,3,0,3,1,1,3,1,0,3,3,3,3,3,0,1,3,3,3,3,0
  153. Data 1,1,3,3,3,0,1,1,1,3,3,0,1,1,1,1,3,0,1,1,1,1,1,0,3,1,1,1,1,0,3,3,1,1,1,0
  154. Data 3,3,3,1,1,0,3,3,3,3,1,0,0,0,0,0,0,1,1,3,3,1,1,0,0,1,3,0,3,1,1,1,0
  155. Data 3,1,3,1,0,3,1,1,0,1,0,1,1,3,1,0,3,3,1,0,1,1,1,1,0,1,1,0,1,3,3,3,0
  156. Data 3,1,3,0,1,3,1,1,0,3,3,0,3,1,0,3,3,3,0,1,3,3,1,0,3,3,1,3,0,1,3,1,0
  157. Data 1,1,1,0,3,0,1,1,3,0,1,1,1,3,0,1,3,3,0,3,1,1,3,0,3,1,3,3,0,3,3,1,1,0
  158. Data 0,0,0,0,0,0
  159. Rem
  160. Rem **********************************************************************
  161. Rem *                           MENU INITIALIZE                          *
  162. Rem **********************************************************************
  163. Rem
  164. Procedure Menu_init
  165.   A$(0)=" Desk "
  166.   A$(1)="  About Dah-Ditter    "
  167.   A$(2)="----------------------"
  168.   A$(3)="1"
  169.   A$(4)="2"
  170.   A$(5)="3"
  171.   A$(6)="4"
  172.   A$(7)="5"
  173.   A$(8)="6"
  174.   A$(9)=""
  175.   A$(10)=" File "
  176.   A$(11)="  Load Discourse  "
  177.   A$(12)="  Save Discourse  "
  178.   A$(13)="------------------"
  179.   A$(14)="  Quit            "
  180.   A$(15)=""
  181.   A$(16)=" Discourses "
  182.   A$(17)="  Erase All      "
  183.   A$(18)="-----------------"
  184.   A$(19)="  Build New      "
  185.   A$(20)="  Edit Existing  "
  186.   A$(21)=""
  187.   A$(22)=" Traffic "
  188.   A$(23)="  Set Parameters     "
  189.   A$(24)="---------------------"
  190.   A$(25)="  Receive Discourse  "
  191.   A$(26)="  Random Groupings   "
  192.   A$(27)="  Key Practice       "
  193.   A$(28)=""
  194.   A$(29)=" Hamming "
  195.   A$(30)="  Morse Code     "
  196.   A$(31)="  Q Signals      "
  197.   A$(32)="  RST System     "
  198.   A$(33)="  Abbreviations  "
  199.   A$(34)=""
  200.   A$(35)=""
  201.   Menu A$()
  202. Return
  203. Rem
  204. Rem **********************************************************************
  205. Rem *                         RSRC INITIALIZE                            *
  206. Rem **********************************************************************
  207. Rem
  208. Procedure Rsrc_init
  209.   Gosub Aes_cont(110,0,1,1,0)
  210.   Lpoke Addrin,Varptr(Rsrc$)
  211.   Gemsys
  212.   Gosub Aes_cont(112,2,1,0,1)
  213.   Gosub Aes_gint(0,0,About%,0,0,0)
  214.   Gemsys
  215.   About_adr=Lpeek(Addrout)
  216.   Gosub Aes_gint(0,0,Config%,0,0,0)
  217.   Gemsys
  218.   Config_adr=Lpeek(Addrout)
  219.   Gosub Aes_gint(0,0,Morse_table%,0,0,0)
  220.   Gemsys
  221.   Morse_table_adr=Lpeek(Addrout)
  222.   Gosub Aes_gint(0,0,Help%,0,0,0)
  223.   Gemsys
  224.   Help_adr=Lpeek(Addrout)
  225. Return
  226. Rem
  227. Rem **********************************************************************
  228. Rem *                            AES CONTROL                             *
  229. Rem **********************************************************************
  230. Rem
  231. Procedure Aes_cont(Var1,Var2,Var3,Var4,Var5)
  232.   Dpoke Gcontrl,Var1
  233.   Dpoke Gcontrl+2,Var2
  234.   Dpoke Gcontrl+4,Var3
  235.   Dpoke Gcontrl+6,Var4
  236.   Dpoke Gcontrl+8,Var5
  237. Return
  238. Rem
  239. Rem **********************************************************************
  240. Rem *                           AES GINTIN                               *
  241. Rem **********************************************************************
  242. Rem
  243. Procedure Aes_gint(Offset,Var1,Var2,Var3,Var4,Var5)
  244.   Dpoke Gintin+Offset,Var1
  245.   Dpoke Gintin+2+Offset,Var2
  246.   Dpoke Gintin+4+Offset,Var3
  247.   Dpoke Gintin+6+Offset,Var4
  248.   Dpoke Gintin+8+Offset,Var5
  249. Return
  250. Rem
  251. Rem **********************************************************************
  252. Rem *                         HANDLE DIALOG 1                            *
  253. Rem **********************************************************************
  254. Rem
  255. Procedure Handle_dialog_1(Tree,Start_ob)
  256.   Sget Screen$
  257.   Gosub Aes_cont(54,0,5,1,0)         ! form_center
  258.   Lpoke Addrin,Tree
  259.   Gemsys
  260.   Fx=Dpeek(Gintout+2)
  261.   Fy=Dpeek(Gintout+4)
  262.   Fw=Dpeek(Gintout+6)
  263.   Fh=Dpeek(Gintout+8)
  264.   Gosub Aes_cont(51,9,1,0,0)         ! form_dial(0)
  265.   Gosub Aes_gint(0,0,0,0,0,0)
  266.   Gosub Aes_gint(10,Fx,Fy,Fw,Fh,0)
  267.   Gemsys
  268.   Gosub Aes_gint(0,1,0,0,0,0)        ! form_dial(1)
  269.   Gemsys
  270.   Gosub Aes_cont(42,6,1,1,0)         ! objc_draw
  271.   Gosub Aes_gint(0,0,3,Fx,Fy,Fw)
  272.   Gosub Aes_gint(10,Fh,0,0,0,0)
  273.   Gemsys
  274. Return
  275. Rem
  276. Rem **********************************************************************
  277. Rem *                        HANDLE DIALOG 2                             *
  278. Rem **********************************************************************
  279. Rem
  280. Procedure Handle_dialog_2(Tree,Start_ob,Redraw%)
  281.   Gosub Aes_cont(50,1,1,1,0)         ! form_do
  282.   Gosub Aes_gint(0,Start_ob,0,0,0,0)
  283.   Lpoke Addrin,Tree
  284.   Gemsys
  285.   Clicked%=Dpeek(Gintout)
  286.   Gosub Aes_cont(47,8,1,1,0)         ! objc_change
  287.   Gosub Aes_gint(0,Clicked%,0,Fx,Fy,Fw)
  288.   Gosub Aes_gint(10,Fh,0,0,0,0)
  289.   Gemsys
  290.   If Redraw%
  291.     Gosub Aes_cont(42,6,1,1,0)         ! objc_draw
  292.     Gosub Aes_gint(0,0,3,Fx,Fy,Fw)
  293.     Gosub Aes_gint(10,Fh,0,0,0,0)
  294.     Gemsys
  295.     Redraw%=0
  296.   Endif
  297. Return
  298. Rem
  299. Rem **********************************************************************
  300. Rem *                        HANDLE DIALOG 3                             *
  301. Rem **********************************************************************
  302. Rem
  303. Procedure Handle_dialog_3
  304.   Gosub Aes_cont(51,9,1,0,0)         ! form_dial(2)
  305.   Gosub Aes_gint(0,2,0,0,0,0)
  306.   Gosub Aes_gint(10,Fx,Fy,Fw,Fh,0)
  307.   Gemsys
  308.   Gosub Aes_gint(0,3,0,0,0,0)        ! form_dial(3)
  309.   Gemsys
  310.   Sput Screen$
  311. Return
  312. Rem
  313. Rem **********************************************************************
  314. Rem *                           STATE SELECT                             *
  315. Rem **********************************************************************
  316. Rem
  317. Procedure State_sel(Start%,Finish%,P.var)
  318.   For I%=Start% To Finish%
  319.     Temp%=Fn Status(I%)
  320.     If (Temp% And Selected%)=1
  321.       *P.var=I%
  322.     Endif
  323.   Next I%
  324. Return
  325. Rem
  326. Rem **********************************************************************
  327. Rem *                           RESET STATES                             *
  328. Rem **********************************************************************
  329. Rem
  330. Procedure Reset_state(Clr_object%,Set_object%)
  331.   Dpoke (Config_adr+Clr_object%*24+10),0
  332.   Dpoke (Config_adr+Set_object%*24+10),1
  333. Return
  334. Rem **********************************************************************
  335. Rem *                             SELECTION                              *
  336. Rem **********************************************************************
  337. Rem
  338. Procedure Selection
  339.   Rem
  340.   Rem ----------------------------------- About Dah-Ditter ----------------
  341.   Rem
  342.   If A$(Menu(0))=A$(1)
  343.     Old_color_2=Xbios(7,2,-1)
  344.     Setcolor 2,4,5,6
  345.     Gosub Handle_dialog_1(About_adr,0)
  346.     Gosub Handle_dialog_2(About_adr,0,0)
  347.     Gosub Handle_dialog_3
  348.     Void Xbios(7,2,Old_color_2)
  349.   Endif
  350.   Rem
  351.   Rem ----------------------------------- Load Discourse ------------------
  352.   Rem
  353.   If A$(Menu(0))=A$(11)
  354.     Start_load:
  355.     Fileselect "\*.dis","",File$
  356.     If File$=""
  357.       Goto Finish_load
  358.     Endif
  359.     If Exist(File$)=-1
  360.       Open "I",#1,File$
  361.       Input #1,Msg_num%
  362.       For I%=1 To Msg_num%
  363.         Input #1,Message$(I%)
  364.       Next I%
  365.       Close #1
  366.     Else
  367.       Alert 1,"|File does not exist.",1," OK ",Dummy
  368.       Goto Start_load
  369.     Endif
  370.     Finish_load:
  371.   Endif
  372.   Rem
  373.   Rem ----------------------------------- Save Discourse ------------------
  374.   Rem
  375.   If A$(Menu(0))=A$(12)
  376.     If Msg_num%=0
  377.       Alert 1,"|No Discourse to Save.",1," OK ",Dummy
  378.       Goto Finish_save
  379.     Endif
  380.     Fileselect "\*.dis","",File$
  381.     File$=File$+".dis"
  382.     Open "O",#1,File$
  383.     Write #1,Msg_num%
  384.     For I%=1 To Msg_num%
  385.       Write #1,Message$(I%)
  386.     Next I%
  387.     Close #1
  388.     Finish_save:
  389.   Endif
  390.   Rem
  391.   Rem ----------------------------------- Quit ----------------------------
  392.   Rem
  393.   If A$(Menu(0))=A$(14)
  394.     Void Xbios(7,0,Orig_color0%)
  395.     Void Xbios(7,1,Orig_color1%)
  396.     Void Xbios(7,2,Orig_color2%)
  397.     Void Xbios(7,3,Orig_color3%)
  398.     Menu Kill
  399.     Gosub Aes_cont(111,0,1,0,0)
  400.     Gemsys
  401.     End
  402.   Endif
  403.   Rem
  404.   Rem ----------------------------------- Erase All -----------------------
  405.   Rem
  406.   If A$(Menu(0))=A$(17)
  407.     Msg_num%=0
  408.     For I%=1 To 5
  409.       Message$(I%)=""
  410.     Next I%
  411.   Endif
  412.   Rem
  413.   Rem ----------------------------------- Build New -----------------------
  414.   Rem
  415.   If A$(Menu(0))=A$(19)
  416.     Gosub Message_entry(Mess_new%)
  417.   Endif
  418.   Rem
  419.   Rem ----------------------------------- Edit Existing -------------------
  420.   Rem
  421.   If A$(Menu(0))=A$(20)
  422.     Gosub Message_entry(Mess_edit%)
  423.   Endif
  424.   Rem
  425.   Rem ----------------------------------- Set Parameters ------------------
  426.   Rem
  427.   If A$(Menu(0))=A$(23)
  428.     Start_parameter:
  429.     Gosub Handle_dialog_1(Config_adr,0)
  430.     Gosub Handle_dialog_2(Config_adr,0,0)
  431.     Gosub Handle_dialog_3
  432.     Gosub State_sel(Word5%,Word25%,*Wordtemp%)
  433.     Gosub State_sel(Char5%,Char25%,*Chartemp%)
  434.     Gosub State_sel(Lttrs%,Mixed%,*P_intemp%)
  435.     Gosub State_sel(Pure%,Custom%,*C_outtemp%)
  436.     Gosub State_sel(From_a%,From_z%,*From_ltemp%)
  437.     Gosub State_sel(From_0%,From_9%,*From_ntemp%)
  438.     Gosub State_sel(From_ques%,From_slash%,*From_stemp%)
  439.     Gosub State_sel(To_a%,To_z%,*To_ltemp%)
  440.     Gosub State_sel(To_0%,To_9%,*To_ntemp%)
  441.     Gosub State_sel(To_ques%,To_slash%,*To_stemp%)
  442.     Rem
  443.     If Clicked%=Abort%
  444.       Gosub Reset_state(Wordtemp%,Wordspeed%)
  445.       Gosub Reset_state(Chartemp%,Charspeed%)
  446.       Gosub Reset_state(P_intemp%,Prac_input%)
  447.       Gosub Reset_state(C_outtemp%,Code_output%)
  448.       Gosub Reset_state(From_ltemp%,From_lttr%)
  449.       Gosub Reset_state(From_ntemp%,From_number%)
  450.       Gosub Reset_state(From_stemp%,From_symbol%)
  451.       Gosub Reset_state(To_ltemp%,To_lttr%)
  452.       Gosub Reset_state(To_ntemp%,To_number%)
  453.       Gosub Reset_state(To_stemp%,To_symbol%)
  454.     Else
  455.       Wordspeed%=Wordtemp%
  456.       Charspeed%=Chartemp%
  457.       Prac_input%=P_intemp%
  458.       Prac_output%=P_outtemp%
  459.       Code_output%=C_outtemp%
  460.       From_lttr%=From_ltemp%
  461.       From_number%=From_ntemp%
  462.       From_symbol%=From_stemp%
  463.       To_lttr%=To_ltemp%
  464.       To_number%=To_ntemp%
  465.       To_symbol%=To_stemp%
  466.       If To_lttr%<From_lttr%+47
  467.         Temp%=From_lttr%
  468.         From_lttr%=To_lttr%-47
  469.         To_lttr%=Temp%+47
  470.         Gosub Reset_state(From_ltemp%,From_lttr%)
  471.         Gosub Reset_state(To_ltemp%,To_lttr%)
  472.       Endif
  473.       If To_number%<From_number%+47
  474.         Temp%=From_number%
  475.         From_number%=To_number%-47
  476.         To_number%=Temp%+47
  477.         Gosub Reset_state(From_ntemp%,From_number%)
  478.         Gosub Reset_state(To_ntemp%,To_number%)
  479.       Endif
  480.       If To_symbol%<From_symbol%+47
  481.         Temp%=From_symbol%
  482.         From_symbol%=To_symbol%-47
  483.         To_symbol%=Temp%+47
  484.         Gosub Reset_state(From_stemp%,From_symbol%)
  485.         Gosub Reset_state(To_stemp%,To_symbol%)
  486.       Endif
  487.       If Code_output%=Custom%
  488.         If Wordspeed%>Charspeed%-7
  489.           Wordspeed%=Charspeed%-7
  490.           Gosub Reset_state(Wordtemp%,Wordspeed%)
  491.         Endif
  492.         Rate=Rate_table(Charspeed%-10)
  493.         Delay=Delay_table(Charspeed%-10,Wordspeed%-3)
  494.         Cust_flag%=Custom_flag(Charspeed%-10,Wordspeed%-3)
  495.       Else
  496.         Rate=Rate_table(Wordspeed%-3)
  497.         Delay=Rate
  498.         Cust_flag%=0
  499.       Endif
  500.       Lttr_seed%=From_lttr%+6
  501.       Lttr_rng%=To_lttr%-73-(From_lttr%-From_a%)
  502.       Number_seed%=From_number%-38
  503.       Number_rng%=To_number%-100-(From_number%-From_0%)
  504.       Symbol_seed%=From_symbol%-56
  505.       Symbol_rng%=To_symbol%-111-(From_symbol%-From_ques%)
  506.     Endif
  507.   Endif
  508.   Rem
  509.   Rem ----------------------------------- Receive Discourse ---------------
  510.   Rem
  511.   If A$(Menu(0))=A$(25)
  512.     If Msg_num%=0
  513.       Alert 1,"|No Discourse|Available.",1," OK ",Dummy
  514.       Goto Receive_done
  515.     Endif
  516.     On Menu Button 2,1,1 Gosub Mouse_interrupt
  517.     Msg%=1
  518.     Repeat
  519.       Interrupt!=False
  520.       Text 70,67*Res%,"     "
  521.       Text 64,74*Res%,"       "
  522.       Text 531,67*Res%,"        "
  523.       Text 519,74*Res%,"            "
  524.       Text 53,67*Res%,"Left-Click"
  525.       Text 62,74*Res%,"To Stop"
  526.       Text 523,67*Res%,"Left-Click"
  527.       Text 533,74*Res%,"To Stop"
  528.       Print At(11,5);String$(60," ")
  529.       Print At(36,5);"Get Ready!"
  530.       For Lag=1 To 10000
  531.       Next Lag
  532.       I%=1
  533.       While (Asc(Mid$(Message$(Msg%),I%,1))<>0)
  534.         If Asc(Mid$(Message$(Msg%),I%,1))>96
  535.           Mid$(Message$(Msg%),I%,1)=Chr$(Asc(Mid$(Message$(Msg%),I%,1))-32)
  536.         Endif
  537.         Buffer%(I%)=Asc(Mid$(Message$(Msg%),I%,1))-32
  538.         Inc I%
  539.       Wend
  540.       Print At(11,5);String$(60," ")
  541.       Print "p"
  542.       Print At(28,5);"  Receiving Message...  "
  543.       '
  544.       '
  545.       For Xmit%=1 To I%-1
  546.         On Menu
  547.         Exit If Interrupt!
  548.         If Buffer%(Xmit%)<>0
  549.           Gosub Key_code(Buffer%(Xmit%))
  550.         Else
  551.           Sound 1,0,#125,Delay*4
  552.         Endif
  553.       Next Xmit%
  554.       Text 53,67*Res%,"          "
  555.       Text 62,74*Res%,"       "
  556.       Text 523,67*Res%,"          "
  557.       Text 533,74*Res%,"       "
  558.       Print "q"
  559.       Print At(11,5);String$(60," ")
  560.       Print At(11,5);Message$(Msg%)
  561.       Text 70,67*Res%,"<ESC>"
  562.       Text 64,74*Res%,"To Exit"
  563.       Text 531,67*Res%,"<RETURN>"
  564.       Text 519,74*Res%,"Next Message"
  565.       A=Inp(2)
  566.       Exit If A=27
  567.       Inc Msg%
  568.     Until Msg%>Msg_num%
  569.     Text 70,67*Res%,"     "
  570.     Text 64,74*Res%,"       "
  571.     Text 531,67*Res%,"        "
  572.     Text 519,74*Res%,"            "
  573.     Print At(11,5);String$(60," ")
  574.     Print At(33,5);"No More Traffic"
  575.     For I=1 To 9000
  576.     Next I
  577.     Print At(11,5);String$(60," ")
  578.     Receive_done:
  579.   Endif
  580.   Rem
  581.   Rem ----------------------------------- Random Groupings ----------------
  582.   Rem
  583.   If A$(Menu(0))=A$(26)
  584.     On Menu Button 2,1,1 Gosub Mouse_interrupt
  585.     Print At(11,5);String$(60," ")
  586.     Print At(36,5);"Get Ready!"
  587.     For Lag=1 To 10000
  588.     Next Lag
  589.     If Prac_input%=Lttrs%
  590.       Seed%=Lttr_seed%
  591.       Range%=Lttr_rng%
  592.     Endif
  593.     If Prac_input%=Numbers%
  594.       Seed%=Number_seed%
  595.       Range%=Number_rng%
  596.     Endif
  597.     If Prac_input%=Symbols%
  598.       Seed%=Symbol_seed%
  599.       Range%=Symbol_rng%
  600.     Endif
  601.     For I%=1 To 50
  602.       If Prac_input%=Mixed%
  603.         Seed%=Lttr_seed%
  604.         Range%=Lttr_rng%
  605.         Chance%=Random(10)+1
  606.         If Chance%=7 Or Chance%=3
  607.           Seed%=Number_seed%
  608.           Range%=Number_rng%
  609.         Endif
  610.         If Chance%=5
  611.           Seed%=Symbol_seed%
  612.           Range%=Symbol_rng%
  613.         Endif
  614.       Endif
  615.       Chosen_char%=Random(Range%)+Seed%
  616.       If Chosen_char%=9
  617.         Chosen_char%=31
  618.       Endif
  619.       If Chosen_char%=10 Or Chosen_char%=11
  620.         Sub Chosen_char%,2
  621.       Endif
  622.       Buffer%(I%)=Chosen_char%
  623.     Next I%
  624.     Print At(11,5);String$(60," ")
  625.     Print "p"
  626.     Print At(28,5);"  Receiving Message...  "
  627.     Text 53,67*Res%,"Left-Click"
  628.     Text 62,74*Res%,"To Stop"
  629.     Text 523,67*Res%,"Left-Click"
  630.     Text 533,74*Res%,"To Stop"
  631.     Interrupt!=False
  632.     For Word%=0 To 9
  633.       For I%=1+Word%*5 To 5+Word%*5
  634.         On Menu
  635.         Exit If Interrupt!
  636.         Gosub Key_code(Buffer%(I%))
  637.       Next I%
  638.       Sound 1,0,#125,Delay*4
  639.       Exit If Interrupt!
  640.     Next Word%
  641.     Print "q"
  642.     Print At(11,5);
  643.     Text 53,67*Res%,"          "
  644.     Text 62,74*Res%,"       "
  645.     Text 523,67*Res%,"          "
  646.     Text 533,74*Res%,"       "
  647.     For I=1 To 50
  648.       Print Chr$(Buffer%(I)+32);
  649.       If I/5=Int(I/5)
  650.         Print " ";
  651.       Endif
  652.     Next I
  653.   Endif
  654.   Rem
  655.   Rem ----------------------------------- Key Practice --------------------
  656.   Rem
  657.   If A$(Menu(0))=A$(27)
  658.     Print At(11,5);String$(60," ")
  659.     Text 70,67*Res%,"<ESC>"
  660.     Text 64,74*Res%,"To Exit"
  661.     Text 522,67*Res%,"<LEFT>  DIH"
  662.     Text 522,74*Res%,"<RIGHT> DAH"
  663.     Code$=""
  664.     K%=0
  665.     Init%=0
  666.     Count%=1
  667.     Print "e"
  668.     Print At(11,5);
  669.     Do
  670.       Button=Mousek
  671.       Key$=Inkey$
  672.       Exit If Asc(Key$)=27
  673.       If Button=1
  674.         Sound 1,15,#125,Rate
  675.         Sound 1,0,#125,Rate
  676.         Buffer%(K%)=1
  677.         Inc K%
  678.         Start=Timer
  679.         Char_flag%=0
  680.         Word_flag%=0
  681.         Init%=1
  682.       Endif
  683.       If Button=2
  684.         Sound 1,15,#125,3*Rate
  685.         Sound 1,0,#125,Rate
  686.         Buffer%(K%)=3
  687.         Inc K%
  688.         Start=Timer
  689.         Char_flag%=0
  690.         Word_flag%=0
  691.         Init%=1
  692.       Endif
  693.       Finish=Timer
  694.       Ticks=(Finish-Start)/4
  695.       If Ticks>2*Rate And Char_flag%=0 And Init%=1
  696.         Char%=0
  697.         Search:
  698.         If Char%<65
  699.           Didah%=0
  700.           While (Didah%<=K%)
  701.             If Buffer%(Didah%)=A%(Char%,Didah%)
  702.               Inc Didah%
  703.             Else
  704.               Inc Char%
  705.               Goto Search
  706.             Endif
  707.           Wend
  708.           Print Chr$(Char%+32);
  709.         Else
  710.           Print Chr$(32);
  711.         Endif
  712.         Char_flag%=1
  713.         Inc Count%
  714.         K%=0
  715.         For I%=0 To 6
  716.           Buffer%(I%)=0
  717.         Next I%
  718.       Endif
  719.       If Ticks>6*Rate And Word_flag%=0 And Init%=1
  720.         Print Chr$(32);
  721.         Inc Count%
  722.         Word_flag%=1
  723.       Endif
  724.       If Count%=61
  725.         Count%=1
  726.         Print "f"
  727.         Print At(11,5);String$(60," ")
  728.         Print At(11,5);
  729.         Print "e";
  730.       Endif
  731.     Loop
  732.     Print "f"
  733.     Print At(11,5);String$(60," ")
  734.     Text 46,67*Res%,"             "
  735.     Text 43,74*Res%,"              "
  736.     Text 522,67*Res%,"           "
  737.     Text 522,74*Res%,"           "
  738.   Endif
  739.   Rem
  740.   Rem ----------------------------------- Morse Code Table ----------------
  741.   Rem
  742.   If A$(Menu(0))=A$(30)
  743.     Gosub Handle_dialog_1(Morse_table_adr,0)
  744.     Gosub Handle_dialog_2(Morse_table_adr,0,0)
  745.     Gosub Handle_dialog_3
  746.   Endif
  747.   Rem
  748.   Rem ----------------------------------- Q Signals -----------------------
  749.   Rem
  750.   If A$(Menu(0))=A$(31)
  751.     Gosub Handle_dialog_1(Help_adr,0)
  752.     Q1:
  753.     Print At(36,5);Qs1$
  754.     Print At(25,8);Qs2$
  755.     Print At(25,9);Qs3$
  756.     Print At(25,10);Qs4$
  757.     Print At(25,11);Qs5$
  758.     Print At(25,12);Qs6$
  759.     Print At(25,14);Qs7$
  760.     Print At(25,15);Qs8$
  761.     Print At(25,16);Qs9$
  762.     Print At(25,18);Qs10$
  763.     Print At(25,19);Qs11$
  764.     Gosub Handle_dialog_2(Help_adr,0,1)
  765.     If Clicked%=Help_abort%
  766.       Goto Q_done
  767.     Endif
  768.     If Clicked%=Help_prev%
  769.       Goto Q6
  770.     Endif
  771.     Q2:
  772.     Print At(36,5);Qs1$
  773.     Print At(25,8);Qs12$
  774.     Print At(25,9);Qs13$
  775.     Print At(25,10);Qs14$
  776.     Print At(25,11);Qs15$
  777.     Print At(25,12);Qs16$
  778.     Print At(25,13);Qs17$
  779.     Print At(25,14);Qs18$
  780.     Print At(25,15);Qs19$
  781.     Print At(25,16);Qs20$
  782.     Print At(25,17);Qs21$
  783.     Gosub Handle_dialog_2(Help_adr,0,1)
  784.     If Clicked%=Help_abort%
  785.       Goto Q_done
  786.     Endif
  787.     If Clicked%=Help_prev%
  788.       Goto Q1
  789.     Endif
  790.     Q3:
  791.     Print At(36,5);Qs1$
  792.     Print At(25,8);Qs22$
  793.     Print At(25,9);Qs23$
  794.     Print At(25,10);Qs24$
  795.     Print At(25,11);Qs25$
  796.     Print At(25,12);Qs26$
  797.     Print At(25,13);Qs27$
  798.     Print At(25,14);Qs28$
  799.     Print At(25,15);Qs29$
  800.     Print At(25,16);Qs30$
  801.     Print At(25,17);Qs31$
  802.     Print At(25,18);Qs32$
  803.     Gosub Handle_dialog_2(Help_adr,0,1)
  804.     If Clicked%=Help_abort%
  805.       Goto Q_done
  806.     Endif
  807.     If Clicked%=Help_prev%
  808.       Goto Q2
  809.     Endif
  810.     Q4:
  811.     Print At(36,5);Qs1$
  812.     Print At(25,8);Qs33$
  813.     Print At(25,9);Qs34$
  814.     Print At(25,10);Qs35$
  815.     Print At(25,11);Qs36$
  816.     Print At(25,12);Qs37$
  817.     Print At(25,13);Qs38$
  818.     Print At(25,14);Qs39$
  819.     Print At(25,15);Qs40$
  820.     Print At(25,16);Qs41$
  821.     Print At(25,17);Qs42$
  822.     Print At(25,18);Qs43$
  823.     Gosub Handle_dialog_2(Help_adr,0,1)
  824.     If Clicked%=Help_abort%
  825.       Goto Q_done
  826.     Endif
  827.     If Clicked%=Help_prev%
  828.       Goto Q3
  829.     Endif
  830.     Q5:
  831.     Print At(36,5);Qs1$
  832.     Print At(25,8);Qs44$
  833.     Print At(25,9);Qs45$
  834.     Print At(25,10);Qs46$
  835.     Print At(25,11);Qs47$
  836.     Print At(25,12);Qs48$
  837.     Print At(25,13);Qs49$
  838.     Print At(25,14);Qs50$
  839.     Print At(25,15);Qs51$
  840.     Print At(25,16);Qs52$
  841.     Print At(25,17);Qs53$
  842.     Print At(25,18);Qs54$
  843.     Gosub Handle_dialog_2(Help_adr,0,1)
  844.     If Clicked%=Help_abort%
  845.       Goto Q_done
  846.     Endif
  847.     If Clicked%=Help_prev%
  848.       Goto Q4
  849.     Endif
  850.     Q6:
  851.     Print At(36,5);Qs1$
  852.     Print At(25,8);Qs55$
  853.     Print At(25,9);Qs56$
  854.     Print At(25,10);Qs57$
  855.     Print At(25,11);Qs58$
  856.     Print At(25,12);Qs59$
  857.     Print At(25,13);Qs60$
  858.     Print At(25,14);Qs61$
  859.     Print At(25,15);Qs62$
  860.     Print At(25,16);Blank$
  861.     Print At(25,17);Blank$
  862.     Print At(25,18);Blank$
  863.     Gosub Handle_dialog_2(Help_adr,0,1)
  864.     If Clicked%=Help_abort%
  865.       Goto Q_done
  866.     Endif
  867.     If Clicked%=Help_prev%
  868.       Goto Q5
  869.     Endif
  870.     Q_done:
  871.     Gosub Handle_dialog_3
  872.   Endif
  873.   Rem
  874.   Rem ----------------------------------- RST System ----------------------
  875.   Rem
  876.   If A$(Menu(0))=A$(32)
  877.     Gosub Handle_dialog_1(Help_adr,0)
  878.     R1:
  879.     Print At(36,5);Rst1$
  880.     Print At(25,8);Rst2$
  881.     Print At(25,9);Rst3$
  882.     Print At(25,10);Rst4$
  883.     Print At(25,11);Rst5$
  884.     Print At(25,12);Rst6$
  885.     Print At(25,13);Rst7$
  886.     Print At(25,15);Rst8$
  887.     Print At(25,16);Rst9$
  888.     Print At(25,17);Rst10$
  889.     Gosub Handle_dialog_2(Help_adr,0,1)
  890.     If Clicked%=Help_abort%
  891.       Goto R_done
  892.     Endif
  893.     If Clicked%=Help_prev%
  894.       Goto R4
  895.     Endif
  896.     R2:
  897.     Print At(36,5);Rst1$
  898.     Print At(25,10);Rst11$
  899.     Print At(25,12);Rst12$
  900.     Print At(25,13);Rst13$
  901.     Print At(25,14);Rst14$
  902.     Print At(25,15);Rst15$
  903.     Print At(25,16);Rst16$
  904.     Gosub Handle_dialog_2(Help_adr,0,1)
  905.     If Clicked%=Help_abort%
  906.       Goto R_done
  907.     Endif
  908.     If Clicked%=Help_prev%
  909.       Goto R1
  910.     Endif
  911.     R3:
  912.     Print At(36,5);Rst1$
  913.     Print At(25,8);Rst17$
  914.     Print At(25,10);Rst18$
  915.     Print At(25,11);Rst19$
  916.     Print At(25,12);Rst20$
  917.     Print At(25,13);Rst21$
  918.     Print At(25,14);Rst22$
  919.     Print At(25,15);Rst23$
  920.     Print At(25,16);Rst24$
  921.     Print At(25,17);Rst25$
  922.     Print At(25,18);Rst26$
  923.     Gosub Handle_dialog_2(Help_adr,0,1)
  924.     If Clicked%=Help_abort%
  925.       Goto R_done
  926.     Endif
  927.     If Clicked%=Help_prev%
  928.       Goto R2
  929.     Endif
  930.     R4:
  931.     Print At(36,5);Rst1$
  932.     Print At(25,8);Rst27$
  933.     Print At(25,10);Rst28$
  934.     Print At(25,11);Rst29$
  935.     Print At(25,12);Rst30$
  936.     Print At(25,13);Rst31$
  937.     Print At(25,14);Rst32$
  938.     Print At(25,15);Rst33$
  939.     Print At(25,16);Rst34$
  940.     Print At(25,17);Rst35$
  941.     Print At(25,18);Rst36$
  942.     Gosub Handle_dialog_2(Help_adr,0,1)
  943.     If Clicked%=Help_abort%
  944.       Goto R_done
  945.     Endif
  946.     If Clicked%=Help_prev%
  947.       Goto R3
  948.     Endif
  949.     R_done:
  950.     Gosub Handle_dialog_3
  951.   Endif
  952.   Rem
  953.   Rem ----------------------------------- Abbreviations -------------------
  954.   Rem
  955.   If A$(Menu(0))=A$(33)
  956.     Gosub Handle_dialog_1(Help_adr,0)
  957.     A1:
  958.     Print At(34,5);Abbr1$
  959.     Print At(25,8);Abbr2$
  960.     Print At(25,9);Abbr3$
  961.     Print At(25,10);Abbr4$
  962.     Print At(25,11);Abbr5$
  963.     Print At(25,13);Abbr6$
  964.     Print At(25,14);Abbr7$
  965.     Print At(25,15);Abbr8$
  966.     Print At(25,16);Abbr9$
  967.     Print At(25,17);Abbr10$
  968.     Print At(25,18);Abbr11$
  969.     Gosub Handle_dialog_2(Help_adr,0,1)
  970.     If Clicked%=Help_abort%
  971.       Goto A_done
  972.     Endif
  973.     If Clicked%=Help_prev%
  974.       Goto A10
  975.     Endif
  976.     A2:
  977.     Print At(34,5);Abbr1$
  978.     Print At(25,8);Abbr12$
  979.     Print At(25,9);Abbr13$
  980.     Print At(25,10);Abbr14$
  981.     Print At(25,11);Abbr15$
  982.     Print At(25,12);Abbr16$
  983.     Print At(25,13);Abbr17$
  984.     Print At(25,14);Abbr18$
  985.     Print At(25,15);Abbr19$
  986.     Print At(25,16);Abbr20$
  987.     Print At(25,17);Abbr21$
  988.     Print At(25,18);Abbr22$
  989.     Print At(25,19);Abbr23$
  990.     Gosub Handle_dialog_2(Help_adr,0,1)
  991.     If Clicked%=Help_abort%
  992.       Goto A_done
  993.     Endif
  994.     If Clicked%=Help_prev%
  995.       Goto A1
  996.     Endif
  997.     A3:
  998.     Print At(34,5);Abbr1$
  999.     Print At(25,8);Abbr24$
  1000.     Print At(25,9);Abbr25$
  1001.     Print At(25,10);Abbr26$
  1002.     Print At(25,11);Abbr27$
  1003.     Print At(25,12);Abbr28$
  1004.     Print At(25,13);Abbr29$
  1005.     Print At(25,14);Abbr30$
  1006.     Print At(25,15);Abbr31$
  1007.     Print At(25,16);Abbr32$
  1008.     Print At(25,17);Abbr33$
  1009.     Print At(25,18);Abbr34$
  1010.     Print At(25,19);Abbr35$
  1011.     Gosub Handle_dialog_2(Help_adr,0,1)
  1012.     If Clicked%=Help_abort%
  1013.       Goto A_done
  1014.     Endif
  1015.     If Clicked%=Help_prev%
  1016.       Goto A2
  1017.     Endif
  1018.     A4:
  1019.     Print At(34,5);Abbr1$
  1020.     Print At(25,8);Abbr36$
  1021.     Print At(25,9);Abbr37$
  1022.     Print At(25,10);Abbr38$
  1023.     Print At(25,11);Abbr39$
  1024.     Print At(25,12);Abbr40$
  1025.     Print At(25,13);Abbr41$
  1026.     Print At(25,14);Abbr42$
  1027.     Print At(25,15);Abbr43$
  1028.     Print At(25,16);Abbr44$
  1029.     Print At(25,17);Abbr45$
  1030.     Print At(25,18);Abbr46$
  1031.     Print At(25,19);Abbr47$
  1032.     Gosub Handle_dialog_2(Help_adr,0,1)
  1033.     If Clicked%=Help_abort%
  1034.       Goto A_done
  1035.     Endif
  1036.     If Clicked%=Help_prev%
  1037.       Goto A3
  1038.     Endif
  1039.     A5:
  1040.     Print At(34,5);Abbr1$
  1041.     Print At(25,8);Abbr48$
  1042.     Print At(25,9);Abbr49$
  1043.     Print At(25,10);Abbr50$
  1044.     Print At(25,11);Abbr51$
  1045.     Print At(25,12);Abbr52$
  1046.     Print At(25,13);Abbr53$
  1047.     Print At(25,14);Abbr54$
  1048.     Print At(25,15);Abbr55$
  1049.     Print At(25,16);Abbr56$
  1050.     Print At(25,17);Abbr57$
  1051.     Print At(25,18);Abbr58$
  1052.     Print At(25,19);Abbr59$
  1053.     Gosub Handle_dialog_2(Help_adr,0,1)
  1054.     If Clicked%=Help_abort%
  1055.       Goto A_done
  1056.     Endif
  1057.     If Clicked%=Help_prev%
  1058.       Goto A4
  1059.     Endif
  1060.     A6:
  1061.     Print At(34,5);Abbr1$
  1062.     Print At(25,8);Abbr60$
  1063.     Print At(25,9);Abbr61$
  1064.     Print At(25,10);Abbr62$
  1065.     Print At(25,11);Abbr63$
  1066.     Print At(25,12);Abbr64$
  1067.     Print At(25,13);Abbr65$
  1068.     Print At(25,14);Abbr66$
  1069.     Print At(25,15);Abbr67$
  1070.     Print At(25,16);Abbr68$
  1071.     Print At(25,17);Abbr69$
  1072.     Print At(25,18);Abbr70$
  1073.     Print At(25,19);Abbr71$
  1074.     Gosub Handle_dialog_2(Help_adr,0,1)
  1075.     If Clicked%=Help_abort%
  1076.       Goto A_done
  1077.     Endif
  1078.     If Clicked%=Help_prev%
  1079.       Goto A5
  1080.     Endif
  1081.     A7:
  1082.     Print At(34,5);Abbr1$
  1083.     Print At(25,8);Abbr72$
  1084.     Print At(25,9);Abbr73$
  1085.     Print At(25,10);Abbr74$
  1086.     Print At(25,11);Abbr75$
  1087.     Print At(25,12);Abbr76$
  1088.     Print At(25,13);Abbr77$
  1089.     Print At(25,14);Abbr78$
  1090.     Print At(25,15);Abbr79$
  1091.     Print At(25,16);Abbr80$
  1092.     Print At(25,17);Abbr81$
  1093.     Print At(25,18);Abbr82$
  1094.     Print At(25,19);Abbr83$
  1095.     Gosub Handle_dialog_2(Help_adr,0,1)
  1096.     If Clicked%=Help_abort%
  1097.       Goto A_done
  1098.     Endif
  1099.     If Clicked%=Help_prev%
  1100.       Goto A6
  1101.     Endif
  1102.     A8:
  1103.     Print At(34,5);Abbr1$
  1104.     Print At(25,8);Abbr84$
  1105.     Print At(25,9);Abbr85$
  1106.     Print At(25,10);Abbr86$
  1107.     Print At(25,11);Abbr87$
  1108.     Print At(25,12);Abbr88$
  1109.     Print At(25,13);Abbr89$
  1110.     Print At(25,14);Abbr90$
  1111.     Print At(25,15);Abbr91$
  1112.     Print At(25,16);Abbr92$
  1113.     Print At(25,17);Abbr93$
  1114.     Print At(25,18);Abbr94$
  1115.     Print At(25,19);Abbr95$
  1116.     Gosub Handle_dialog_2(Help_adr,0,1)
  1117.     If Clicked%=Help_abort%
  1118.       Goto A_done
  1119.     Endif
  1120.     If Clicked%=Help_prev%
  1121.       Goto A7
  1122.     Endif
  1123.     A9:
  1124.     Print At(34,5);Abbr1$
  1125.     Print At(25,8);Abbr96$
  1126.     Print At(25,9);Abbr97$
  1127.     Print At(25,10);Abbr98$
  1128.     Print At(25,11);Abbr99$
  1129.     Print At(25,12);Abbr100$
  1130.     Print At(25,13);Abbr101$
  1131.     Print At(25,14);Abbr102$
  1132.     Print At(25,15);Abbr103$
  1133.     Print At(25,16);Abbr104$
  1134.     Print At(25,17);Abbr105$
  1135.     Print At(25,18);Abbr106$
  1136.     Print At(25,19);Abbr107$
  1137.     Gosub Handle_dialog_2(Help_adr,0,1)
  1138.     If Clicked%=Help_abort%
  1139.       Goto A_done
  1140.     Endif
  1141.     If Clicked%=Help_prev%
  1142.       Goto A8
  1143.     Endif
  1144.     A10:
  1145.     Print At(34,5);Abbr1$
  1146.     Print At(25,8);Abbr108$
  1147.     Print At(25,9);Abbr109$
  1148.     Print At(25,10);Abbr110$
  1149.     Print At(25,11);Abbr111$
  1150.     Print At(25,12);Abbr112$
  1151.     Print At(25,13);Abbr113$
  1152.     Print At(25,14);Abbr114$
  1153.     Gosub Handle_dialog_2(Help_adr,0,1)
  1154.     If Clicked%=Help_abort%
  1155.       Goto A_done
  1156.     Endif
  1157.     If Clicked%=Help_prev%
  1158.       Goto A9
  1159.     Endif
  1160.     A_done:
  1161.     Gosub Handle_dialog_3
  1162.   Endif
  1163.   Menu Off
  1164. Return
  1165. Rem **********************************************************************
  1166. Rem *                              KEY CODE                              *
  1167. Rem **********************************************************************
  1168. Rem
  1169. Procedure Key_code(Char%)
  1170.   Element%=0
  1171.   Repeat
  1172.     Dur%=A%(Char%,Element%)
  1173.     Inc Element%
  1174.     Sound 1,15,#125,Dur%*Rate
  1175.     Sound 1,0,#125,Rate
  1176.   Until Dur%=0
  1177.   Sound 1,0,#125,Delay*2+Cust_flag%
  1178. Return
  1179. Rem
  1180. Rem **********************************************************************
  1181. Rem *                            MESSAGE ENTRY                           *
  1182. Rem **********************************************************************
  1183. Rem
  1184. Procedure Message_entry(Flag%)
  1185.   Msg%=1
  1186.   Text 70,67*Res%,"<ESC>"
  1187.   Text 61,74*Res%,"To Abort"
  1188.   Text 531,67*Res%,"<RETURN>"
  1189.   Text 519,74*Res%,"Next Message"
  1190.   Entry_start:
  1191.   Print At(11,5);String$(60,"_");
  1192.   If Flag%=Mess_new%
  1193.     If Msg_num%=5
  1194.       Alert 1,"Discourse Buffer Full.",1," OK ",Dummy
  1195.       Goto Entry_exit
  1196.     Else
  1197.       Inc Msg_num%
  1198.       Msg%=Msg_num%
  1199.     Endif
  1200.   Else
  1201.     If Msg%>Msg_num%
  1202.       Alert 1,"No More Messages|To Edit.",1," OK ",Dummy
  1203.       Goto Entry_exit
  1204.     Else
  1205.       Print At(11,5);Message$(Msg%);
  1206.     Endif
  1207.   Endif
  1208.   Mess$=Message$(Msg%)
  1209.   Temp_mess$=Mess$
  1210.   Msg_char%=1
  1211.   Print "e";
  1212.   Print At(11,5);
  1213.   Repeat
  1214.     A=Inp(2)
  1215.     If (A=205 And Msg_char%=<Len(Mess$)) Or ((A>31 And A<123) And Msg_char%<60)
  1216.       If A>31 And A<123
  1217.         If Len(Mess$)<60
  1218.           Mess$=Mess$+Chr$(A)
  1219.         Endif
  1220.         Print Chr$(A);
  1221.         If Msg_char%<Len(Mess$)-1
  1222.           For Push%=Len(Mess$) Downto Msg_char%+1
  1223.             Mid$(Mess$,Push%,1)=Mid$(Mess$,Push%-1,1)
  1224.           Next Push%
  1225.           Mid$(Mess$,Msg_char%,1)=Chr$(A)
  1226.           Print At(11+Msg_char%,5);Right$(Mess$,Len(Mess$)-Msg_char%);
  1227.         Endif
  1228.       Endif
  1229.       Inc Msg_char%
  1230.       Goto Entry_done
  1231.     Endif
  1232.     If ((A=203 Or A=8) And Msg_char%>1) Or A=127
  1233.       If A=8 Or A=127
  1234.         If A=127 And Msg_char%=<Len(Mess$)
  1235.           For Pull%=Msg_char% To Len(Mess$)-1
  1236.             Mid$(Mess$,Pull%,1)=Mid$(Mess$,Pull%+1,1)
  1237.           Next Pull%
  1238.           Temp$=Left$(Mess$,Len(Mess$)-1)
  1239.           Mess$=""
  1240.           Mess$=Temp$
  1241.           Print At(11,5);Mess$;"_";
  1242.           Goto Entry_done
  1243.         Endif
  1244.         If A=8
  1245.           If Msg_char%<Len(Mess$)
  1246.             For Pull%=Msg_char% To Len(Mess$)
  1247.               Mid$(Mess$,Pull%-1,1)=Mid$(Mess$,Pull%,1)
  1248.             Next Pull%
  1249.           Endif
  1250.           Temp$=Left$(Mess$,Len(Mess$)-1)
  1251.           Mess$=""
  1252.           Mess$=Temp$
  1253.           Print At(11,5);Mess$;"_";
  1254.           Dec Msg_char%
  1255.         Endif
  1256.       Else
  1257.         Dec Msg_char%
  1258.       Endif
  1259.     Endif
  1260.     Entry_done:
  1261.     Print "e";
  1262.     Print At(10+Msg_char%,5);
  1263.   Until A=13 Or A=27
  1264.   If A=27 And Flag%=Mess_new%
  1265.     Mess$=""
  1266.   Endif
  1267.   If A=27 And Flag%=Mess_edit%
  1268.     Mess$=Temp_mess$
  1269.   Endif
  1270.   Message$(Msg%)=Mess$
  1271.   If Message$(Msg%)=""
  1272.     For I%=Msg% To 4
  1273.       Message$(I%)=Message$(I%+1)
  1274.     Next I%
  1275.     Message$(5)=""
  1276.     Dec Msg_num%
  1277.   Else
  1278.     Inc Msg%
  1279.   Endif
  1280.   If A=13
  1281.     Goto Entry_start
  1282.   Endif
  1283.   Entry_exit:
  1284.   Print "f";
  1285.   Print At(11,5);String$(60," ");
  1286.   Text 70,67*Res%,"     "
  1287.   Text 61,74*Res%,"        "
  1288.   Text 531,67*Res%,"        "
  1289.   Text 519,74*Res%,"            "
  1290. Return
  1291. Rem
  1292. Rem **********************************************************************
  1293. Rem *                             HELP INIT                              *
  1294. Rem **********************************************************************
  1295. Rem
  1296. Procedure Help_init
  1297.   Qs1$="Q SIGNALS"
  1298.   Qs2$="Q Signals give hams an avenue"
  1299.   Qs3$="of communication which allows"
  1300.   Qs4$="the use of short three-letter"
  1301.   Qs5$="words to replace frequently"
  1302.   Qs6$="used phrases."
  1303.   Qs7$="  These signals can also serve"
  1304.   Qs8$="as questions if they are sent"
  1305.   Qs9$="followed by a question mark."
  1306.   Qs10$="  Inceased speed of traffic is"
  1307.   Qs11$="the greatest benefit offered."
  1308.   Rem
  1309.   Qs12$="QRG   Exact Frequency"
  1310.   Qs13$="QRH   Frequency Varies"
  1311.   Qs14$="QRI   Tone of Transmission"
  1312.   Qs15$="      1. Good  2. Variable"
  1313.   Qs16$="      3. Bad"
  1314.   Qs17$="QRK   Signal Intelligibility"
  1315.   Qs18$="      1. Bad   2. Poor"
  1316.   Qs19$="      3. Fair  4. Good"
  1317.   Qs20$="      5. Excellent"
  1318.   Qs21$="QRL   Busy"
  1319.   Rem
  1320.   Qs22$="QRM   Transmission Interference"
  1321.   Qs23$="      1. None      2. Slight"
  1322.   Qs24$="      3. Moderate  4. Severe"
  1323.   Qs25$="      5. Extreme"
  1324.   Qs26$="QRN   Transmission Static"
  1325.   Qs27$="      (1-5 as in QRM)"
  1326.   Qs28$="QRO   Increase Power"
  1327.   Qs29$="QRP   Decrease Power"
  1328.   Qs30$="QRQ   Send Faster"
  1329.   Qs31$="QRS   Send Slower"
  1330.   Qs32$="QRT   Stop Sending"
  1331.   Rem
  1332.   Qs33$="QRV   Ready"
  1333.   Qs34$="QRW   Inform of Calling"
  1334.   Qs35$="QRX   Call Again"
  1335.   Qs36$="QRY   Number of Turn"
  1336.   Qs37$="QRZ   Call"
  1337.   Qs38$="QSA   Signal Strength"
  1338.   Qs39$="      1. Very Weak  2. Weak"
  1339.   Qs40$="      3. Fair       4. Good"
  1340.   Qs41$="      5. Very Good"
  1341.   Qs42$="QSB   Signal Fading"
  1342.   Qs43$="QSD   Keying Defective"
  1343.   Rem
  1344.   Qs44$="QSG   Send # Messages at a Time"
  1345.   Qs45$="QSK   Break In"
  1346.   Qs46$="QSL   Acknowledge Receipt"
  1347.   Qs47$="QSM   Repeat Message"
  1348.   Qs48$="QSN   Traffic Heard"
  1349.   Qs49$="QSO   Communicate With"
  1350.   Qs50$="QSP   Relay To"
  1351.   Qs51$="QST   CQ ARRL"
  1352.   Qs52$="QSU   Send or Reply"
  1353.   Qs53$="QSV   Send a Series of V's"
  1354.   Qs54$="QSW   Send on Frequency"
  1355.   Rem
  1356.   Qs55$="QSX   Listen on Frequency"
  1357.   Qs56$="QSY   Change Frequency"
  1358.   Qs57$="QSZ   Send More Than Once"
  1359.   Qs58$="QTA   Cancel Message Number"
  1360.   Qs59$="QTB   Word Count Disagreement"
  1361.   Qs60$="QTC   # of Messages to Send"
  1362.   Qs61$="QTH   Location is"
  1363.   Qs62$="QTR   Correct Time is"
  1364.   Rem
  1365.   Rst1$="RST SYSTEM"
  1366.   Rst2$="   The RST system provides the"
  1367.   Rst3$="Ham operator with a method of"
  1368.   Rst4$="relaying to a contact the quality"
  1369.   Rst5$="of any transmitted signal. The"
  1370.   Rst6$="letters in 'RST' each have the"
  1371.   Rst7$="following interpretations."
  1372.   Rst8$="(R)eadability"
  1373.   Rst9$="(S)trength"
  1374.   Rst10$="(T)one"
  1375.   Rem
  1376.   Rst11$="Readability:"
  1377.   Rst12$=" 1 - Unreadable"
  1378.   Rst13$=" 2 - Barely Readable"
  1379.   Rst14$=" 3 - Readable, Much Difficulty"
  1380.   Rst15$=" 4 - Readable, Little Difficulty"
  1381.   Rst16$=" 5 - Perfectly Readable"
  1382.   Rem
  1383.   Rst17$="Signal Strength:"
  1384.   Rst18$=" 1 - Faint"
  1385.   Rst19$=" 2 - Very Weak"
  1386.   Rst20$=" 3 - Weak"
  1387.   Rst21$=" 4 - Fair"
  1388.   Rst22$=" 5 - Fairly Good"
  1389.   Rst23$=" 6 - Good"
  1390.   Rst24$=" 7 - Moderately Strong"
  1391.   Rst25$=" 8 - Strong"
  1392.   Rst26$=" 9 - Extremely Strong"
  1393.   Rem
  1394.   Rst27$="Tone:"
  1395.   Rst28$=" 1 - Sixty-Cycle AC"
  1396.   Rst29$=" 2 - Very Rough AC"
  1397.   Rst30$=" 3 - Rough AC"
  1398.   Rst31$=" 4 - Rough Note"
  1399.   Rst32$=" 5 - Strong Ripple-Modulated"
  1400.   Rst33$=" 6 - Trace of Ripple-Modulation"
  1401.   Rst34$=" 7 - Nearly Pure"
  1402.   Rst35$=" 8 - Nearly Perfect"
  1403.   Rst36$=" 9 - Perfect"
  1404.   Rem
  1405.   Abbr1$="ABBREVIATIONS"
  1406.   Abbr2$="  Abbreviations allow the Ham"
  1407.   Abbr3$="operator to communicate with"
  1408.   Abbr4$="others using very short and"
  1409.   Abbr5$="intuitive letter combinations."
  1410.   Abbr6$="  Following is a list of the"
  1411.   Abbr7$="most commonly used abbreviations."
  1412.   Abbr8$="It is possible to cut down the"
  1413.   Abbr9$="time necessary to import your"
  1414.   Abbr10$="ideas using these. But be sure"
  1415.   Abbr11$="your contact knows them too!"
  1416.   Rem
  1417.   Abbr12$="AA       All After"
  1418.   Abbr13$="AB       All Before"
  1419.   Abbr14$="ABT      About"
  1420.   Abbr15$="ADR      Address"
  1421.   Abbr16$="AGN      Again"
  1422.   Abbr17$="ANT      Antenna"
  1423.   Abbr18$="BCI      Broadcast Interference"
  1424.   Abbr19$="BCL      Broadcast Listener"
  1425.   Abbr20$="BK       Break"
  1426.   Abbr21$="BN       All Between"
  1427.   Abbr22$="BUG      Semi-Automatic Key"
  1428.   Abbr23$="B4       Before"
  1429.   Rem
  1430.   Abbr24$="C        Yes"
  1431.   Abbr25$="CFM      Confirm"
  1432.   Abbr26$="CK       Check"
  1433.   Abbr27$="CL       Closing; Call"
  1434.   Abbr28$="CLD      Called"
  1435.   Abbr29$="CLG      Calling"
  1436.   Abbr30$="CQ       Calling Any Station"
  1437.   Abbr31$="CUD      Could"
  1438.   Abbr32$="CUL      See You Later"
  1439.   Abbr33$="CW       Continuous Wave"
  1440.   Abbr34$="DE       From, This is"
  1441.   Abbr35$="DLD-DLVD Delivered"
  1442.   Rem
  1443.   Abbr36$="DR       Dear"
  1444.   Abbr37$="DX       Distance"
  1445.   Abbr38$="ES       And"
  1446.   Abbr39$="FB       Fine Business"
  1447.   Abbr40$="FM       Frequency Modulation"
  1448.   Abbr41$="GA       Go Ahead"
  1449.   Abbr42$="GB       Good-Bye"
  1450.   Abbr43$="GBA      Give Better Address"
  1451.   Abbr44$="GE       Good Evening"
  1452.   Abbr45$="GG       Going"
  1453.   Abbr46$="GM       Good Morning"
  1454.   Abbr47$="GN       Good Night"
  1455.   Rem
  1456.   Abbr48$="GND      Ground"
  1457.   Abbr49$="GUD      Good"
  1458.   Abbr50$="HI       Telegraph laugh; High"
  1459.   Abbr51$="HR       Here; Hear"
  1460.   Abbr52$="HV       Have"
  1461.   Abbr53$="HW       How"
  1462.   Abbr54$="LID      Poor Operator"
  1463.   Abbr55$="MA-MILS  Milliamperes"
  1464.   Abbr56$="MSG      Message"
  1465.   Abbr57$="N        No"
  1466.   Abbr58$="NCS      Net Control Station"
  1467.   Abbr59$="ND       Nothing Doing"
  1468.   Rem
  1469.   Abbr60$="NIL      Nothing"
  1470.   Abbr61$="NM       No More"
  1471.   Abbr62$="NR       Number"
  1472.   Abbr63$="NW       Now; I Resume"
  1473.   Abbr64$="OB       Old Boy"
  1474.   Abbr65$="OC       Old Chap"
  1475.   Abbr66$="OM       Old Man"
  1476.   Abbr67$="OP-OPR   Operator"
  1477.   Abbr68$="OT       Old Timer"
  1478.   Abbr69$="PBL      Preamble"
  1479.   Abbr70$="PSE      Please"
  1480.   Abbr71$="PWR      Power"
  1481.   Rem
  1482.   Abbr72$="PX       Press"
  1483.   Abbr73$="R        Are; Received"
  1484.   Abbr74$="RCD      Received"
  1485.   Abbr75$="RCVR-RX  Receiver"
  1486.   Abbr76$="REF      Refer"
  1487.   Abbr77$="RFI      Radio Frq Interference"
  1488.   Abbr78$="RIG      Station Equipment"
  1489.   Abbr79$="RPT      Repeat"
  1490.   Abbr80$="RTTY     Radioteletype"
  1491.   Abbr81$="SASE     Self-Addr Stamped Env"
  1492.   Abbr82$="SED      Said"
  1493.   Abbr83$="SIG      Signal; Signature"
  1494.   Rem
  1495.   Abbr84$="SINE     Initials, Nickname"
  1496.   Abbr85$="SKED     Schedule"
  1497.   Abbr86$="SRI      Sorry"
  1498.   Abbr87$="SSB      Single Sideband"
  1499.   Abbr88$="SVC      Service"
  1500.   Abbr89$="T        Zero"
  1501.   Abbr90$="TFC      Traffic"
  1502.   Abbr91$="TMW      Tomorrow"
  1503.   Abbr92$="TNX-TKS  Thanks"
  1504.   Abbr93$="TT       That"
  1505.   Abbr94$="TU       Thank You"
  1506.   Abbr95$="TVI      TV Interference"
  1507.   Rem
  1508.   Abbr96$="TX       Transmitter"
  1509.   Abbr97$="TXT      Text"
  1510.   Abbr98$="UR-URS   Your; You're; Yours"
  1511.   Abbr99$="VFO      Variable- Freq Osc"
  1512.   Abbr100$="VY       Very"
  1513.   Abbr101$="WA       Word After"
  1514.   Abbr102$="WB       Word Before"
  1515.   Abbr103$="WD-WDS   Word; Words"
  1516.   Abbr104$="WKD-WKG  Worked; Working"
  1517.   Abbr105$="WL       Well; Will"
  1518.   Abbr106$="WUD      Would"
  1519.   Abbr107$="WX       Weather"
  1520.   Rem
  1521.   Abbr108$="XCVR     Transceiver"
  1522.   Abbr109$="XMTR     Transmitter"
  1523.   Abbr110$="XTAL     Crystal"
  1524.   Abbr111$="XYL-YF   Wife"
  1525.   Abbr112$="YL       Young Lady"
  1526.   Abbr113$="73       Best Regards"
  1527.   Abbr114$="88       Love and Kisses"
  1528.   Rem
  1529. Return
  1530. '
  1531. Procedure Mouse_interrupt
  1532.   Interrupt!=True
  1533. Return
  1534.